Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Node / ReticulumProjects / MeshChatX.git / files / tests / backend / benchmark_db_lite.py

Displaying Raw • Download


tests/backend/benchmark_db_lite.py v4.6.0-rc.2 (7bbe9846) Text, 4.55 KB

T8b949e# SPDX-License-Identifier: 0BSD

Tff7b72import T7ee787os
Tff7b72import T7ee787random
Tff7b72import T7ee787secrets
Tff7b72import T7ee787shutil
Tff7b72import T7ee787tempfile
Tff7b72import T7ee787time

Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787database Tff7b72import Te6edf3Database


Tff7b72def Td2a8ffgenerate_hashTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3secretsTff7b72.Td2a8fftoken_hexTb4b4b4(T79c0ff16Tb4b4b4)


Tff7b72def Td2a8fftest_db_performanceTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3dir_path Tff7b72= Te6edf3tempfileTff7b72.Td2a8ffmkdtempTb4b4b4(Tb4b4b4)
Te6edf3db_path Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3dir_pathTb4b4b4, Ta5d6ff"Ta5d6fftest_perf.dbTa5d6ff"Tb4b4b4)
Te6edf3db Tff7b72= Te6edf3DatabaseTb4b4b4(Te6edf3db_pathTb4b4b4)
Te6edf3dbTff7b72.Td2a8ffinitializeTb4b4b4(Tb4b4b4)

T8b949e# Reduced numbers for faster execution in CI/Test environment
Te6edf3num_peers Tff7b72= T79c0ff100
Te6edf3num_messages_per_peer Tff7b72= T79c0ff100
Te6edf3total_messages Tff7b72= Te6edf3num_peers Tff7b72* Te6edf3num_messages_per_peer

Te6edf3peer_hashes Tff7b72= Tb4b4b4[Te6edf3generate_hashTb4b4b4(Tb4b4b4) Tff7b72for Te6edf3_ Tff7b72in Tffa657rangeTb4b4b4(Te6edf3num_peersTb4b4b4)Tb4b4b4]
Te6edf3my_hash Tff7b72= Te6edf3generate_hashTb4b4b4(Tb4b4b4)

Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffInserting Tffd700{Te6edf3total_messagesTffd700}Ta5d6ff messages for Tffd700{Te6edf3num_peersTffd700}Ta5d6ff peers...Ta5d6ff"Tb4b4b4)
Te6edf3start_time Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)

T8b949e# Use a transaction for bulk insertion to see potential speedup if we implement it
T8b949e# But for now, using the standard DAO method
Tff7b72for Te6edf3iTb4b4b4, Te6edf3peer_hash Tff7b72in Tffa657enumerateTb4b4b4(Te6edf3peer_hashesTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3i Tff7b72% T79c0ff25 Tff7b72== T79c0ff0Tb4b4b4:
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffProgress: Tffd700{Te6edf3iTffd700}Ta5d6ff/Tffd700{Te6edf3num_peersTffd700}Ta5d6ff peersTa5d6ff"Tb4b4b4)
Tff7b72for Te6edf3j Tff7b72in Tffa657rangeTb4b4b4(Te6edf3num_messages_per_peerTb4b4b4)Tb4b4b4:
Te6edf3is_incoming Tff7b72= Te6edf3randomTff7b72.Td2a8ffchoiceTb4b4b4(Tb4b4b4[T79c0ff0Tb4b4b4, T79c0ff1Tb4b4b4]Tb4b4b4)
Te6edf3src Tff7b72= Te6edf3peer_hash Tff7b72if Te6edf3is_incoming Tff7b72else Te6edf3my_hash
Te6edf3dst Tff7b72= Te6edf3my_hash Tff7b72if Te6edf3is_incoming Tff7b72else Te6edf3peer_hash

Te6edf3msg Tff7b72= Tb4b4b4{
Ta5d6ff"Ta5d6ffhashTa5d6ff"Tb4b4b4: Te6edf3generate_hashTb4b4b4(Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffsource_hashTa5d6ff"Tb4b4b4: Te6edf3srcTb4b4b4,
Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4: Te6edf3dstTb4b4b4,
Ta5d6ff"Ta5d6ffpeer_hashTa5d6ff"Tb4b4b4: Te6edf3peer_hashTb4b4b4, T8b949e# Use peer_hash directly as the app does now
Ta5d6ff"Ta5d6ffstateTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffdeliveredTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffprogressTa5d6ff"Tb4b4b4: T79c0ff1.0Tb4b4b4,
Ta5d6ff"Ta5d6ffis_incomingTa5d6ff"Tb4b4b4: Te6edf3is_incomingTb4b4b4,
Ta5d6ff"Ta5d6ffmethodTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffdirectTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffdelivery_attemptsTa5d6ff"Tb4b4b4: T79c0ff1Tb4b4b4,
Ta5d6ff"Ta5d6fftitleTa5d6ff"Tb4b4b4: Ta5d6fffTa5d6ff"Ta5d6ffTitle Tffd700{Te6edf3jTffd700}Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffcontentTa5d6ff"Tb4b4b4: Ta5d6fffTa5d6ff"Ta5d6ffContent Tffd700{Te6edf3jTffd700}Ta5d6ff for peer Tffd700{Te6edf3iTffd700}Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6fffieldsTa5d6ff"Tb4b4b4: Ta5d6ff"Tffd700{}Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6fftimestampTa5d6ff"Tb4b4b4: Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4) Tff7b72- Te6edf3randomTff7b72.Td2a8ffrandintTb4b4b4(T79c0ff0Tb4b4b4, T79c0ff1000000Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffrssiTa5d6ff"Tb4b4b4: Tff7b72-Te6edf3randomTff7b72.Td2a8ffrandintTb4b4b4(T79c0ff30Tb4b4b4, T79c0ff100Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffsnrTa5d6ff"Tb4b4b4: Te6edf3randomTff7b72.Td2a8ffrandomTb4b4b4(Tb4b4b4) Tff7b72* T79c0ff10Tb4b4b4,
Ta5d6ff"Ta5d6ffqualityTa5d6ff"Tb4b4b4: Te6edf3randomTff7b72.Td2a8ffrandintTb4b4b4(T79c0ff1Tb4b4b4, T79c0ff5Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffis_spamTa5d6ff"Tb4b4b4: T79c0ff0Tb4b4b4,
Tb4b4b4}
Te6edf3dbTff7b72.Td2a8ffmessagesTff7b72.Td2a8ffupsert_lxmf_messageTb4b4b4(Te6edf3msgTb4b4b4)

Te6edf3end_time Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffInsertion took Tffd700{Te6edf3end_time Tff7b72- Te6edf3start_timeTffd700:Ta5d6ff.2fTffd700}Ta5d6ff secondsTa5d6ff"Tb4b4b4)

T8b949e# Test get_conversations
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffTesting get_conversations()...Ta5d6ff"Tb4b4b4)
Te6edf3start_time Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Te6edf3convs Tff7b72= Te6edf3dbTff7b72.Td2a8ffmessagesTff7b72.Td2a8ffget_conversationsTb4b4b4(Tb4b4b4)
Te6edf3end_time Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Tffa657printTb4b4b4(
Ta5d6fffTa5d6ff"Ta5d6ffget_conversations() returned Tffd700{Tffa657lenTb4b4b4(Te6edf3convsTb4b4b4)Tffd700}Ta5d6ff conversations in Tffd700{Te6edf3end_time Tff7b72- Te6edf3start_timeTffd700:Ta5d6ff.4fTffd700}Ta5d6ff secondsTa5d6ff"Tb4b4b4,
Tb4b4b4)

T8b949e# Test get_conversation_messages for a random peer
Te6edf3target_peer Tff7b72= Te6edf3randomTff7b72.Td2a8ffchoiceTb4b4b4(Te6edf3peer_hashesTb4b4b4)
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffTesting get_conversation_messages() for peer Tffd700{Te6edf3target_peerTffd700}Ta5d6ff...Ta5d6ff"Tb4b4b4)
Te6edf3start_time Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Te6edf3msgs Tff7b72= Te6edf3dbTff7b72.Td2a8ffmessagesTff7b72.Td2a8ffget_conversation_messagesTb4b4b4(Te6edf3target_peerTb4b4b4, Te6edf3limitTff7b72=T79c0ff50Tb4b4b4)
Te6edf3end_time Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Tffa657printTb4b4b4(
Ta5d6fffTa5d6ff"Ta5d6ffget_conversation_messages() returned Tffd700{Tffa657lenTb4b4b4(Te6edf3msgsTb4b4b4)Tffd700}Ta5d6ff messages in Tffd700{Te6edf3end_time Tff7b72- Te6edf3start_timeTffd700:Ta5d6ff.4fTffd700}Ta5d6ff secondsTa5d6ff"Tb4b4b4,
Tb4b4b4)

T8b949e# Test unread states for all peers
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffTesting get_conversations_unread_states()...Ta5d6ff"Tb4b4b4)
Te6edf3start_time Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Te6edf3_ Tff7b72= Te6edf3dbTff7b72.Td2a8ffmessagesTff7b72.Td2a8ffget_conversations_unread_statesTb4b4b4(Te6edf3peer_hashesTb4b4b4)
Te6edf3end_time Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Tffa657printTb4b4b4(
Ta5d6fffTa5d6ff"Ta5d6ffget_conversations_unread_states() for Tffd700{Tffa657lenTb4b4b4(Te6edf3peer_hashesTb4b4b4)Tffd700}Ta5d6ff peers took Tffd700{Te6edf3end_time Tff7b72- Te6edf3start_timeTffd700:Ta5d6ff.4fTffd700}Ta5d6ff secondsTa5d6ff"Tb4b4b4,
Tb4b4b4)

T8b949e# Test announces performance
Te6edf3num_announces Tff7b72= T79c0ff5000
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffInserting Tffd700{Te6edf3num_announcesTffd700}Ta5d6ff announces...Ta5d6ff"Tb4b4b4)
Te6edf3start_time Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Tff7b72for Te6edf3i Tff7b72in Tffa657rangeTb4b4b4(Te6edf3num_announcesTb4b4b4)Tb4b4b4:
Te6edf3ann Tff7b72= Tb4b4b4{
Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4: Te6edf3generate_hashTb4b4b4(Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffaspectTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6fflxmf.deliveryTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffidentity_hashTa5d6ff"Tb4b4b4: Te6edf3generate_hashTb4b4b4(Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffidentity_public_keyTa5d6ff"Tb4b4b4: Te6edf3secretsTff7b72.Td2a8fftoken_hexTb4b4b4(T79c0ff32Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffapp_dataTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffsome app dataTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffrssiTa5d6ff"Tb4b4b4: Tff7b72-Te6edf3randomTff7b72.Td2a8ffrandintTb4b4b4(T79c0ff30Tb4b4b4, T79c0ff100Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffsnrTa5d6ff"Tb4b4b4: Te6edf3randomTff7b72.Td2a8ffrandomTb4b4b4(Tb4b4b4) Tff7b72* T79c0ff10Tb4b4b4,
Ta5d6ff"Ta5d6ffqualityTa5d6ff"Tb4b4b4: Te6edf3randomTff7b72.Td2a8ffrandintTb4b4b4(T79c0ff1Tb4b4b4, T79c0ff5Tb4b4b4)Tb4b4b4,
Tb4b4b4}
Te6edf3dbTff7b72.Td2a8ffannouncesTff7b72.Td2a8ffupsert_announceTb4b4b4(Te6edf3annTb4b4b4)
Te6edf3end_time Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffAnnounce insertion took Tffd700{Te6edf3end_time Tff7b72- Te6edf3start_timeTffd700:Ta5d6ff.2fTffd700}Ta5d6ff secondsTa5d6ff"Tb4b4b4)

Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffTesting get_filtered_announces()...Ta5d6ff"Tb4b4b4)
Te6edf3start_time Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Te6edf3_ Tff7b72= Te6edf3dbTff7b72.Td2a8ffannouncesTff7b72.Td2a8ffget_filtered_announcesTb4b4b4(Te6edf3limitTff7b72=T79c0ff100Tb4b4b4)
Te6edf3end_time Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffget_filtered_announces() took Tffd700{Te6edf3end_time Tff7b72- Te6edf3start_timeTffd700:Ta5d6ff.4fTffd700}Ta5d6ff secondsTa5d6ff"Tb4b4b4)

Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffTesting trim_announces_for_aspect()...Ta5d6ff"Tb4b4b4)
Te6edf3start_time Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Te6edf3dbTff7b72.Td2a8ffannouncesTff7b72.Td2a8fftrim_announces_for_aspectTb4b4b4(Ta5d6ff"Ta5d6fflxmf.deliveryTa5d6ff"Tb4b4b4, T79c0ff1000Tb4b4b4)
Te6edf3end_time Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6fftrim_announces_for_aspect() took Tffd700{Te6edf3end_time Tff7b72- Te6edf3start_timeTffd700:Ta5d6ff.4fTffd700}Ta5d6ff secondsTa5d6ff"Tb4b4b4)

Te6edf3shutilTff7b72.Td2a8ffrmtreeTb4b4b4(Te6edf3dir_pathTb4b4b4)


Tff7b72if Tff7b72__name__ Tff7b72== Ta5d6ff"Ta5d6ff__main__Ta5d6ff"Tb4b4b4:
Te6edf3test_db_performanceTb4b4b4(Tb4b4b4)


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────